import type { RoleModel } from './models';

import { requestClient } from '#/api/request';

/**
 * 查询所有角色数据集合
 * @param params 查询参数
 * @returns 返回结果
 */
export async function getRoleListApi(params?: any) {
  return requestClient.get<RoleModel[]>('/role/list', { params });
}

/**
 * 分页获取角色集合
 * @param params 分页查询参数
 * @returns 返回查询结果
 */
export async function getRolePagedListApi(params: PageParams) {
  return requestClient.get<RoleModel[]>('/role/list-page', { params });
}

/**
 * 通过Id查询角色
 * @param id 角色 Id
 * @returns 返回结果，包含拥有的菜单对应关系
 */
export async function getRoleByIdApi(id: number) {
  return requestClient.get<RoleModel>(`/role/${id}`);
}

/**
 * 创建角色
 * @param data 要创建的角色
 * @returns 返回结果
 */
export async function createRoleApi(data: RoleModel) {
  return requestClient.post<boolean>('/role', data);
}

/**
 * 更新角色
 * @param data 要更新的角色
 * @returns 返回结果
 */
export async function updateRoleApi(data: RoleModel) {
  return requestClient.put<boolean>('/role', data);
}

/**
 * 删除角色
 * @param id 角色 Id
 * @returns 返回结果
 */
export async function deleteRoleApi(id: number) {
  return requestClient.delete<boolean>(`/role/${id}`);
}

/**
 * 授权菜单
 * @param id 角色 Id
 * @param menuIds 授权的菜单 Id 集合
 * @returns 返回结果
 */
export async function grantMenuApi(id: number, menuIds: number[]) {
  return requestClient.post<boolean>(`/role/grant-menus`, {
    roleId: id,
    menuIds,
  });
}
